"""
二分查找案例
请对一个列表(元素是从小到大排序的)进行二分查找[1,8,10,89,1000,1234].输入一个数看看该列表是否
存在此数,并且求出下标,如果没有就返回-1
二分查找的注意事项和细节
(1).二分查找的前提是该列表已经是一个排序好的列表(从小到大或者从大到小)
(2):排列的顺序是从小到大还是从大道小,会影响二分查找的代码逻辑
"""

#要查找的列表
num_list = [1,8,10,89,1000,1234]
#编写二分查找函数
def binary_search(my_list , find_val):
    """
    功能：完成二分查找
    :param my_list : 要查找的列表(该列表是有大小顺序的)
    :param find_val : 要查找的元素/值
    :return : 如果找到返回对应的下标,如果没有找到就返回-1
    """
    #left_index : 表示左边的索引
    #right_index : 表示右边的索引
    left_index , right_index = 0 , len(my_list) - 1
    #定义找到数的下标
    find_index = -1
    #使用while循环,不断的折半比较,前提是要满足 left_index <= right_index
    while left_index <= right_index:
        #中间数的下标/索引
        mid_index = (left_index + right_index) // 2
        #2.如果mid_val > find_val,那么就去 mid_val的左边查找
        if my_list[mid_index] > find_val:
            right_index = mid_index - 1
        #3.如果mid_val < find_val,那么就去 mid_val的右边查找
        elif my_list[mid_index] < find_val:
            left_index = mid_index + 1
        else:#相等
            find_index = mid_index
            break #找到一个就退出循环

    return find_index

#测试
res_index = binary_search(num_list , 1000)
if res_index == -1:
    print("没有找到该数")
else:
    print(f"找到数，对应的下标{res_index}")